﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WeixinSDK.API
{
    public static class UserManager
    {
        /// <summary>
        /// 创建分组
        /// </summary>
        /// <param name="access_token"></param>
        /// <param name="jsonData"></param>
        /// <returns></returns>
        public static string CreateGroup(string access_token, string jsonData)
        {
            return WxApiHelper.HttpPost(access_token, WxApiHelper.Categroy.groups, WxApiHelper.Verb.create, jsonData);
        }

        /// <summary>
        /// 查询所有分组
        /// </summary>
        /// <param name="access_token"></param>
        /// <returns></returns>
        public static string GetGroups(string access_token)
        {
            return WxApiHelper.HttpGet(access_token, WxApiHelper.Categroy.groups, WxApiHelper.Verb.get);
        }

        /// <summary>
        /// 查询用户所在分组
        /// </summary>
        /// <param name="access_token"></param>
        /// <param name="jsonData"></param>
        /// <returns></returns>
        public static string GetGroupIdOfUser(string access_token, string jsonData)
        {
            return WxApiHelper.HttpPost(access_token, WxApiHelper.Categroy.groups, WxApiHelper.Verb.getid, jsonData);
        }

        /// <summary>
        /// 修改分组名
        /// </summary>
        /// <param name="access_token"></param>
        /// <param name="jsonData"></param>
        /// <returns></returns>
        public static string UpdateGroup(string access_token, string jsonData)
        {
            return WxApiHelper.HttpPost(access_token, WxApiHelper.Categroy.groups, WxApiHelper.Verb.update, jsonData);
        }

        /// <summary>
        /// 移动用户分组
        /// </summary>
        /// <param name="access_token"></param>
        /// <param name="jsonData"></param>
        /// <returns></returns>
        public static string MoveUserToGroup(string access_token, string jsonData)
        {
            return WxApiHelper.HttpPost(access_token, WxApiHelper.Categroy.groups.ToString(), "members/update", jsonData);
        }

        /// <summary>
        /// 获取用户基本信息
        /// </summary>
        /// <param name="access_token">调用接口凭证</param>
        /// <param name="openID">普通用户的标识，对当前公众号唯一</param>
        /// <param name="lang">返回国家地区语言版本，zh_CN 简体，zh_TW 繁体，en 英语</param>
        /// <returns></returns>
        public static UserInfo GetUserInfo(string access_token, string openID, string lang = null)
        {
            var json = WxApiHelper.HttpGet(
                access_token,
                WxApiHelper.Categroy.user,
                WxApiHelper.Verb.info,
                string.Concat("&openid=", openID, "&lang=", lang));

            NLog.LogManager.GetCurrentClassLogger().Info(json);

            return WxJson.DeserializeObject<UserInfo>(json);
        }

        //-------获取用户地理位置
        //是一个事件消息

        //-------网页授权获取用户基本信息

        public class UserInfo : WxError
        {
            /// <summary>
            /// 用户是否订阅该公众号标识，值为0时，代表此用户没有关注该公众号，拉取不到其余信息。
            /// </summary>
            public int subscribe { get; set; }
            /// <summary>
            /// 用户的标识，对当前公众号唯一
            /// </summary>
            public string openid { get; set; }
            /// <summary>
            /// 用户的昵称
            /// </summary>
            public string nickname { get; set; }
            /// <summary>
            /// 用户的性别，值为1时是男性，值为2时是女性，值为0时是未知
            /// </summary>
            public Sex sex { get; set; }
            /// <summary>
            /// 用户所在城市
            /// </summary>
            public string language { get; set; }
            /// <summary>
            /// 用户所在国家
            /// </summary>
            public string city { get; set; }
            /// <summary>
            /// 用户所在省份
            /// </summary>
            public string province { get; set; }
            /// <summary>
            /// 用户的语言，简体中文为zh_CN
            /// </summary>
            public string country { get; set; }
            /// <summary>
            /// 用户头像，最后一个数值代表正方形头像大小（有0、46、64、96、132数值可选，0代表640*640正方形头像），用户没有头像时该项为空
            /// </summary>
            public string headimgurl { get; set; }
            /// <summary>
            /// 用户关注时间，为时间戳。如果用户曾多次关注，则取最后关注时间
            /// </summary>
            public long subscribe_time { get; set; }
        }

        public enum Sex { unknown, male, femal }
    }
}
